1. Field of the Invention
The present invention relates to data processing systems, and more particularly to data processing systems having one or more processors and one or more input/output channel controllers wherein the system allows remote retry and speculative execution to improve system performance.
2. Prior Art
Input/output channel controllers ("IOCCs") are typically used in computer systems to generate industry standard I/O buses from high performance system/memory buses. These IOCCs act as bridges between system memory and I/O devices for DMA (direct memory access) operations and a bridge between processors and I/O devices for programmed input/output operations (PIO).
In a prior art system, a system bus includes snooping and retry protocols to support coherent memory access. For example, when processor A performs a memory read for data which exists in processor B's cache, then B will perform a retry to A's memory request. Furthermore, other bus devices may also perform a retry if they are unable to snoop their internal caches. However, when A performs an I/O read from IOCC C, then only IOCC C is allowed to retry the operation. (This type of retry is known in the art as flow control retry.) Thus, coherency retry was allowed in the prior art by a foreign device during memory operations, but flow control retry was only allowed by the targeted slave device during I/O operations.
If a data processing system allows a foreign device to indicate flow control retry as well as the targeted slave device, then the system design complexity may be significantly reduced and numerous system performance options may be realizable. However, there is one disadvantage in that the targeted slave may introduce some latency to the requested operation. Normally, the targeted slave is allowed to begin executing an operation as soon as it is received from the system bus, since it is the only device which can retry the operation. With a system bus allowing remote flow control retry capability, the targeted slave device must wait until the retry window before it can execute the operation thus introducing latency.